package com.cskaoyan.file.api;

import java.io.File;
import java.io.FileFilter;
import java.util.Arrays;

/*
        自定义获取功能：
        需求:
        1. 假设我想找到目标目录下的，所有的文本文件 .txt
        2. 假设我想找到目标目录下所有的.java
        ....
        3. 假设我想查找目标目录下所有的子目录

        过滤器接口
            FileFilter
            public interface FileFilter {
                //  判断参数File对象是否满足条件
                //  如果满足条件，返回true，否则返回false
                boolean accept(File targetFile);
            }

        自定义获取功能
            // 根据我们自己定义的条件，在当前目录下，查询满足条件的子文件或子目录
            File[] listFiles(FileFilter filter)
 */
public class Demo7MyGet {


    public static void main(String[] args) {
        File dir = new File("d:\\demo");
        // 查找目标目录下所有.txt文件
        //findTxt(dir);

        // 查找目标目录下所有的.java文件
        //findJava(dir);

        // 一个FileFilter子类对象表示一种具体的条件（.txt文件）
        //TxtFileFilter txtFileFilter = new TxtFileFilter();
        //find(dir, txtFileFilter);

        // 一个FileFilter子类对象表示一种具体的条件（.java文件）
        //JavaFileFilter javaFileFilter = new JavaFileFilter();
        //find(dir, javaFileFilter);


        // 使用jdk中定义的自定义获取方法
        TxtFileFilter txtFileFilter = new TxtFileFilter();
        // 在目标目录中查询满足条件的子文件，子目录
        File[] files = dir.listFiles(txtFileFilter);
        System.out.println(Arrays.toString(files));

    }

    /*
         在指定的目标目录中，找所有txt文件
     */
    public static  void  findTxt(File dir) {

        // 先获取目标目录下所有的子文件或者子目录
        File[] files = dir.listFiles();

        for (int i = 0; i < files.length; i++) {
            // for 中的if表示具体查询条件判断
            if (files[i].isFile()) {
               // 是文件
                String name = files[i].getName();
                if (name.endsWith(".txt")) {
                    System.out.println(files[i].getAbsolutePath());
               }
            }
        }
    }

    public static void findJava(File dir) {
        // 先获取目标目录下所有的子文件或者子目录
        File[] files = dir.listFiles();
        // for 中的if表示具体查询条件判断
        for (int i = 0; i < files.length; i++) {
            if (files[i].isFile()) {
                // 是文件
                String name = files[i].getName();
                if (name.endsWith(".java")) {
                    System.out.println(files[i].getAbsolutePath());
                }
            }
        }
    }


    /*
            dir： 目标目录
            fileFilter: 表示查询条件
     */
    public static void find(File dir, FileFilter fileFilter) {

        // 获取当前目录下的所有的子文件或子目录
        File[] files = dir.listFiles();

        for (int i = 0; i < files.length; i++) {
            // 根据具体条件判断
            File targetFile = files[i];
            if (fileFilter.accept(targetFile)) {
                //满足条件
                System.out.println(targetFile.getAbsolutePath());
            }
        }
    }
}

// 定义一个FileFilter子类，描述要给具体的条件
//  判断文件是否是.txt
class TxtFileFilter implements FileFilter {

    @Override
    public boolean accept(File file) {
        if (!file.isFile()) {
            // 不是文件，不满足条件
            return false;
        }
        String name = file.getName();
        return name.endsWith(".txt");
    }
}

// 定义一个FileFilter子类，描述要给具体的条件
//  判断文件是否是.java
class JavaFileFilter implements FileFilter {

    @Override
    public boolean accept(File file) {
        if (file.isDirectory()) {
            // 不是文件
            return false;
        }
        String name = file.getName();
        return name.endsWith(".java");
    }
}

